﻿/*+===================================================================
File:      FBullet.cpp

Summary:   Định nghĩa các phương thức của CFBullet.
===================================================================+*/

#include "LBullet.h"
#include "Gun.h"

CLBullet::CLBullet(D3DXVECTOR2 pos, int id, int typeID, float angle, int charDirectionX) 
: CBullet(pos, id, typeID, angle)
{
	m_pos = pos;
	m_nId = id;

	m_pSprite = m_pResourceManager->GetSprite(ID_SPRITE_L_BULLET);

	m_angle = angle * PI / 180.0f;
	m_nCharDirectionX = charDirectionX;

	m_v.x = 700 * cos(m_angle);
	m_v.y = 700 * sin(m_angle);

	m_bIsLive = true;
}


CLBullet::~CLBullet()
{

}

void CLBullet::Update(float timeFrame)
{
	if (!m_bIsLive)
		return;

	D3DXVECTOR2 posInViewPort = CViewport::GetInstance()->TransformMatrix(m_pos);

	if (posInViewPort.x < 0 || posInViewPort.x > SCREEN_WIDTH || posInViewPort.y < 0 || posInViewPort.y > SCREEN_HEIGHT)
	{
		Kill();
	}

	if (preBullet == NULL)
	{
		m_pos += m_v * timeFrame;
	}
	else
	{
		D3DXVECTOR2 prePos = preBullet->GetPos();

		// Tính toán khoảng cách với viên đạn trước đó.
		float distance = sqrt((prePos.x - m_pos.x)*(prePos.x - m_pos.x) + (prePos.y - m_pos.y)*(prePos.y - m_pos.y));

		if (distance > 30)
		{
			m_pos.x = prePos.x - 32 * cos(m_angle);
			m_pos.y = prePos.y - 32 * sin(m_angle);
		}
	}

	UpdateBox(timeFrame);

	m_nCount = m_nCount + 1;
}

void CLBullet::Draw()
{
	if (!m_bIsLive)
		return;

	D3DXVECTOR2 pos;
	pos = CViewport::GetInstance()->TransformMatrix(m_pos);

	if (m_nCount % 2)
	{
		if (m_nCharDirectionX == 1)
			m_pSprite->Draw(pos, -m_angle);
		else
			m_pSprite->DrawFlipX(pos, -m_angle);
	}
	

	//m_pSprite->Draw(pos, - m_angle);
}

bool CLBullet::Kill()
{
	m_bIsLive = false;
	m_pContainerGun->ReloadBullet();

	if (nextBullet != NULL)
		nextBullet->preBullet = NULL;

	return true;
}